package cn.itcast.mybatis.demo5;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

public class OrderProxy implements InvocationHandler{
	
	private OrderService orderService;
	
	
	public OrderProxy(OrderService orderService){
		this.orderService = orderService;
	}
	
	
	/**
	 * 提供一个给orderService产生代理类的方法
	 */
	public OrderService getOrderServiceProxy(){
		return (OrderService) Proxy.newProxyInstance(orderService.getClass().getClassLoader(), orderService.getClass().getInterfaces(), this);
	}


	/**
	 * 实现InvocationHandler接口之后，需要实现一个invoke方法，所有的父类中的方法调用，都在这里通过代理类来实现的
	 */
	@Override
	public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
		if(method.getName().equals("insertOrder")){
			//通过method.invoke来调用我们父类中的方法
			Object invoke = method.invoke(orderService, args);
			System.out.println("插入订单之后进行日志的记录");
			return invoke;
		}
		return method.invoke(orderService, args);
	}
	
	
	
	
	
	

}
